package com.longtop.perform.zb.index.web;

import java.util.Map;

import com.longtop.framework.base.BaseAction;
import com.longtop.framework.common.QueryConditions;
import com.longtop.framework.common.QueryResult;
import com.longtop.framework.security.BaseCheckedException;
import com.longtop.framework.security.SessionObject;
import com.longtop.framework.util.BeanUtil;
import com.longtop.framework.util.WebUtil;
import com.longtop.intelliweb.action.IActionContext;
import com.longtop.intelliweb.action.IInitContext;
import com.longtop.intelliweb.view.Dataset;
import com.longtop.perform.zb.index.model.TZbIndex;
import com.longtop.perform.zb.index.service.IndexService;

/**
 * 指标管理--定性指标
 * 
 * @author 杨向阳
 * 
 */
public class IndexDxListAction extends BaseAction {

	private final static String DATASET_INDEX = "Dataset_Index";

	/**
	 * 系统共用：初始化调用
	 */
	public void init(IInitContext context) {
		super.init(context);
	}

	/**
	 * 本页jsp：初始化业务数据(覆写父类方法)
	 */
	public void thisPageInit(IInitContext context) {
		// 调用公用查询方法
		commonQuery(context, false);
	}

	/**
	 * 自定义查询
	 * 
	 * @param context
	 */
	public void searchIndex(IActionContext context) {

		// 调用公用查询方法
		commonQuery(context, true);
	}

	/**
	 * 执行翻页查询
	 * 
	 * @param context
	 */
	public void loadIndex(IActionContext context) {

		// 调用公用查询方法
		commonQuery(context, false);
	}

	/**
	 * 保存、修改、删除一起做！
	 * 
	 * @param context
	 */
	public void saveIndex(IActionContext context) {

		Dataset dataset = (Dataset) context.getDataset(DATASET_INDEX); // 获取页面上的dataset的结构

		// 验证数据集是否存在及是否有变化
		if (!WebUtil.validateDatasetChange(this, dataset, DATASET_INDEX)) {
			return;
		}

		IndexService indexService = this.getBean(IndexService.BEAN_ID); // 调用Spring的业务逻辑类

		try {
			// 把dataset转成要删除的主键列表、新增bean及更新bean列表
			Map changeMap = WebUtil.datasetToObjectList(dataset, "indexId", TZbIndex.class);

			// 获得SessionObject对象,得到用户对象
			SessionObject sessionObject = this.getSessionObject(context);

			// 调用业务逻辑层的批量更新方法(在一个事务内实现)
			Integer[] count = indexService.saveIndex(changeMap, sessionObject);

			// 向JSP页面传递操作结果信息
			this.hintInfoMessage(WebUtil.getSubmitSuccessInfo(count[0].intValue(), count[1].intValue(), count[2].intValue()));
		} catch (BaseCheckedException e) {
			// 在界面显示错误信息
			this.hintErrorMessage(e.getMessage());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 通用查询.将数据查询出来，拼装数据。
	 * 
	 * @param object
	 *            上下文：IInitContext或IActionContext
	 * @param isFirstPageNoo
	 *            是否从第一页开始查询！
	 */
	private void commonQuery(Object object, boolean isFirstPageNo) {

		IndexService indexService = getBean(IndexService.BEAN_ID); // 调用Spring的业务逻辑类
		QueryConditions queryConditions = WebUtil.createQueryConditions(); // 查询条件辅助类

		// 获取dataset,验证数据集对象是否存在
		Dataset dataset = this.getDataset(object, DATASET_INDEX);
		if (!WebUtil.validateDatasetExist(this, dataset, DATASET_INDEX)) {
			return;
		}

		// 判断是否是由 init方法 调用
		if (object instanceof IActionContext) {
			IActionContext context = (IActionContext) object;

			// 取得界面传入的查询条件(必须设置command的submitForm=true)
			String indexId = context.getElementValue("Text_indexId");
			String indexName = context.getElementValue("Text_indexName");
			String fitObject = context.getElementValue("Text_fitObject");
			String createOrgId = context.getElementValue("Text_createOrg");

			// 查询条件设值
			queryConditions.setCondition("indexId", QueryConditions.INCLUDE, indexId);
			queryConditions.setCondition("indexName", QueryConditions.INCLUDE, indexName);
			queryConditions.setCondition("createOrgId", QueryConditions.EQUAL, createOrgId);
//			if (fitObject.equals("11")) {
			queryConditions.setCondition("fitObject", QueryConditions.EQUAL, fitObject);
//			} else 
//				if (fitObject.equals("1")) {
//				queryConditions.setCondition("fitObject", QueryConditions.NOT_EQUAL, "1");
//			} else if (fitObject.equals("2")) {
//				queryConditions.setCondition("fitObject", QueryConditions.NOT_EQUAL, "2");
//			}
		}

		queryConditions.setCondition("indexType", QueryConditions.EQUAL, "1");	//
		
		// 当前第几页
		int pageNo = 1;
		if (!isFirstPageNo)
			pageNo = dataset.getPageNo();

		// 每页多少条记录
		int pageSize = dataset.getPageSize();

		// 调用service层，依据条件查询第一页记录，并获取总页数
		QueryResult queryResult = indexService.loadIndex(queryConditions, pageNo, pageSize);
		BeanUtil.queryResultToDataset(queryResult, dataset, false, true);
	}
}